[アップデート] CodeDeploy Agent が Red Hat Enterprise Linux 9をサポートしました
Red Hat Enterprise Linux 9のEC2インスタンスにCodeDeployを使ってアプリケーションをデプロイしたい
こんにちは、のんピ(@non____97)です。
皆さんはRed Hat Enterprise Linux 9(以降RHEL 9)のEC2インスタンスにCodeDeployを使ってアプリケーションをデプロイしたいなと思ったことはありますか? 私はあります。
RHEL 9のFull Life Application Streams Release Life CycleはRuby 3.0です。CodeDeploy Agent でのRuby 3.0のサポートは2023/3/3にリリースされた1.5.0からです。
しかし、CodeDeploy Agent 1.5.0や1.6.0がサポートしているOSにはRHEL 9は含まれていませんでした。
CodeDeploy Agentが使えないとなると、デプロイ処理が面倒です。CI/CDとの相性も悪いです。また、Auto Scalongをしている環境であってもゴールデンイメージを都度作り直すのも大変です。
ふと、CodeDeploy AgentのサポートOSを眺めていると、CodeDeploy Agent 1.7.0からRHEL 9がサポート対象に追加されていました。
これで「CodeDeploy Agentが使えないからRHEL 9を使うのを諦める」という悲しい事態にならなくなりました。
ちなみに、私が検証した限りではCodeDeploy Agent 1.6.0でも正常に動作していました。実際1.6.0と1.7.0のソースコードを比較してもRHEL 9特有の事象を回避するための変更はなさそうでした。
試してみた
検証環境
せっかくなので試してみます。
検証環境は以下のとおりです。
検証環境はAWS CDKでデプロイしました。使用したコードは以下リポジトリに保存しています。
CodeDeploy Agentはユーザーデータを使ってインストールしています。デプロイ後にユーザーデータのログを確認してみると、CodeDeploy Agent 1.7.0でインストールされていました。
$ cat /var/log/user-data.log ++ curl -s -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600' http://169.254.169.254/latest/api/token + token=AQAEAIVyWa8oGACiXv2spRuxwD062qBOoPuVTUZ-1-oBnU_EYaq0fw== ++ curl -s -H 'X-aws-ec2-metadata-token: AQAEAIVyWa8oGACiXv2spRuxwD062qBOoPuVTUZ-1-oBnU_EYaq0fw==' http://169.254.169.254/latest/meta-data/placement/availability-zone ++ sed -e 's/.$//' + region_name=us-east-1 + dnf install -y https://s3.us-east-1.amazonaws.com/amazon-ssm-us-east-1/latest/linux_amd64/amazon-ssm-agent.rpm ruby httpd Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use subscription-manager to register. Red Hat Enterprise Linux 9 for x86_64 - AppStre 18 MB/s | 30 MB 00:01 Red Hat Enterprise Linux 9 for x86_64 - BaseOS 12 MB/s | 19 MB 00:01 Red Hat Enterprise Linux 9 Client Configuration 29 kB/s | 2.2 kB 00:00 amazon-ssm-agent.rpm 74 MB/s | 26 MB 00:00 Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: amazon-ssm-agent x86_64 3.3.131.0-1 @commandline 26 M httpd x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 52 k ruby x86_64 3.0.4-160.el9_0 rhel-9-appstream-rhui-rpms 45 k Installing dependencies: apr x86_64 1.7.0-12.el9_3 rhel-9-appstream-rhui-rpms 126 k apr-util x86_64 1.6.1-23.el9 rhel-9-appstream-rhui-rpms 97 k apr-util-bdb x86_64 1.6.1-23.el9 rhel-9-appstream-rhui-rpms 14 k httpd-core x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 1.5 M httpd-filesystem noarch 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 16 k httpd-tools x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 87 k mailcap noarch 2.1.49-5.el9 rhel-9-baseos-rhui-rpms 35 k redhat-logos-httpd noarch 90.4-2.el9 rhel-9-appstream-rhui-rpms 18 k ruby-libs x86_64 3.0.4-160.el9_0 rhel-9-appstream-rhui-rpms 3.3 M rubygem-json x86_64 2.5.1-160.el9_0 rhel-9-appstream-rhui-rpms 63 k rubygem-psych x86_64 3.3.2-160.el9_0 rhel-9-appstream-rhui-rpms 64 k Installing weak dependencies: apr-util-openssl x86_64 1.6.1-23.el9 rhel-9-appstream-rhui-rpms 17 k mod_http2 x86_64 1.15.19-5.el9 rhel-9-appstream-rhui-rpms 152 k mod_lua x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 62 k ruby-default-gems noarch 3.0.4-160.el9_0 rhel-9-appstream-rhui-rpms 50 k rubygem-bigdecimal x86_64 3.0.0-160.el9_0 rhel-9-appstream-rhui-rpms 60 k rubygem-bundler noarch 2.2.33-160.el9_0 rhel-9-appstream-rhui-rpms 460 k rubygem-io-console x86_64 0.5.7-160.el9_0 rhel-9-appstream-rhui-rpms 30 k rubygem-rdoc noarch 6.3.3-160.el9_0 rhel-9-appstream-rhui-rpms 444 k rubygems noarch 3.2.33-160.el9_0 rhel-9-appstream-rhui-rpms 310 k Transaction Summary ================================================================================ Install 23 Packages Total size: 32 M Total download size: 7.0 M Installed size: 130 M Downloading Packages: (1/22): ruby-3.0.4-160.el9_0.x86_64.rpm 615 kB/s | 45 kB 00:00 (2/22): ruby-default-gems-3.0.4-160.el9_0.noarc 616 kB/s | 50 kB 00:00 . . (中略) . . Installed: amazon-ssm-agent-3.3.131.0-1.x86_64 apr-1.7.0-12.el9_3.x86_64 apr-util-1.6.1-23.el9.x86_64 apr-util-bdb-1.6.1-23.el9.x86_64 apr-util-openssl-1.6.1-23.el9.x86_64 httpd-2.4.57-5.el9.x86_64 httpd-core-2.4.57-5.el9.x86_64 httpd-filesystem-2.4.57-5.el9.noarch httpd-tools-2.4.57-5.el9.x86_64 mailcap-2.1.49-5.el9.noarch mod_http2-1.15.19-5.el9.x86_64 mod_lua-2.4.57-5.el9.x86_64 redhat-logos-httpd-90.4-2.el9.noarch ruby-3.0.4-160.el9_0.x86_64 ruby-default-gems-3.0.4-160.el9_0.noarch ruby-libs-3.0.4-160.el9_0.x86_64 rubygem-bigdecimal-3.0.0-160.el9_0.x86_64 rubygem-bundler-2.2.33-160.el9_0.noarch rubygem-io-console-0.5.7-160.el9_0.x86_64 rubygem-json-2.5.1-160.el9_0.x86_64 rubygem-psych-3.3.2-160.el9_0.x86_64 rubygem-rdoc-6.3.3-160.el9_0.noarch rubygems-3.2.33-160.el9_0.noarch Complete! + cd /usr/src/ + curl https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/latest/install -o install % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 19045 100 19045 0 0 133k 0 --:--:-- --:--:-- --:--:-- 133k + chmod +x ./install + ./install auto + systemctl status codedeploy-agent ● codedeploy-agent.service - AWS CodeDeploy Host Agent Loaded: loaded (/usr/lib/systemd/system/codedeploy-agent.service; enabled; preset: disabled) Active: active (running) since Wed 2024-03-20 08:37:35 UTC; 2s ago Main PID: 11623 (ruby) Tasks: 3 (limit: 4180) Memory: 62.2M CPU: 1.425s CGroup: /system.slice/codedeploy-agent.service ├─11623 "codedeploy-agent: master 11623" └─11633 "codedeploy-agent: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller of master 11623" Mar 20 08:37:35 ip-10-10-0-24.ec2.internal systemd[1]: Starting AWS CodeDeploy Host Agent... Mar 20 08:37:35 ip-10-10-0-24.ec2.internal systemd[1]: Started AWS CodeDeploy Host Agent. + cat /opt/codedeploy-agent/.version agent_version: OFFICIAL_1.7.0-92_rpm+ systemctl enable amazon-ssm-agent --now + systemctl enable httpd --now Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
デプロイ後にALBのDNS名を使ってアクセスしてみます。
$ curl non-97-sandbox-alb-540065044.us-east-1.elb.amazonaws.com -I HTTP/1.1 403 Forbidden Date: Wed, 20 Mar 2024 08:44:55 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 5909 Connection: close Server: Apache/2.4.57 (Red Hat Enterprise Linux) Last-Modified: Mon, 09 Aug 2021 11:43:42 GMT ETag: "1715-5c91ee59c9780" Accept-Ranges: bytes
ドキュメントルート直下にはindex.htmlも何もないので、403となりました。
CodeDeployを使ったコンテンツ配布
それではCodeDeployを使ってコンテンツを配布します。
既にアプリケーションはCDKで作成しています。手動でデプロイを作成します。
リビジョンの場所にCodeDeployのサンプルアプリケーションであるs3://aws-codedeploy-us-east-1/samples/latest/SampleApp_Linux.zip
を入力してデプロイの作成をクリックします。
デプロイが開始されました。デプロイ設定をOne At A Timeにしたので1台づつデプロイされていそうです。
しばらくすると1台目のEC2インスタンスへのデプロイが完了しました。
もう一台のEC2インスタンスへのデプロイも開始していそうです。
そのまま4分ほど待つと、デプロイステータスが成功になりました。
ALBのターゲットグループを確認すると、どちらもHealthyになっています。
アクセスすると、確かにHTTPステータスコード200が返ってくるようになりました。
$ curl non-97-sandbox-alb-540065044.us-east-1.elb.amazonaws.com -I HTTP/1.1 200 OK Date: Wed, 20 Mar 2024 09:25:15 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 717 Connection: close Server: Apache/2.4.57 (Red Hat Enterprise Linux) Last-Modified: Wed, 20 Mar 2024 09:22:43 GMT ETag: "2cd-61414220b6098" Accept-Ranges: bytes
CodeDeploy Agentが出力されたログを確認してみます。
$ cat /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log # Logfile created on 2024-03-20 09:22:44 +0000 by logger.rb/v1.4.3 [2024-03-20 09:22:44.321] [d-XWH2NUY35]LifecycleEvent - BeforeInstall [2024-03-20 09:22:44.322] [d-XWH2NUY35]Script - scripts/install_dependencies [2024-03-20 09:22:45.303] [d-XWH2NUY35][stdout]Updating Subscription Management repositories. [2024-03-20 09:22:45.303] [d-XWH2NUY35][stdout]Unable to read consumer identity [2024-03-20 09:22:45.307] [d-XWH2NUY35][stdout] [2024-03-20 09:22:45.307] [d-XWH2NUY35][stdout]This system is not registered with an entitlement server. You can use subscription-manager to register. [2024-03-20 09:22:45.307] [d-XWH2NUY35][stdout] [2024-03-20 09:22:45.551] [d-XWH2NUY35][stdout]Red Hat Enterprise Linux 9 for x86_64 - AppStre 62 kB/s | 4.5 kB 00:00 [2024-03-20 09:22:45.813] [d-XWH2NUY35][stdout]Red Hat Enterprise Linux 9 for x86_64 - BaseOS 79 kB/s | 4.1 kB 00:00 [2024-03-20 09:22:46.029] [d-XWH2NUY35][stdout]Red Hat Enterprise Linux 9 Client Configuration 31 kB/s | 1.5 kB 00:00 [2024-03-20 09:22:46.176] [d-XWH2NUY35][stdout]Package httpd-2.4.57-5.el9.x86_64 is already installed. [2024-03-20 09:22:46.232] [d-XWH2NUY35][stdout]Dependencies resolved. [2024-03-20 09:22:46.234] [d-XWH2NUY35][stdout]Nothing to do. [2024-03-20 09:22:46.234] [d-XWH2NUY35][stdout]Complete! [2024-03-20 09:22:46.378] [d-XWH2NUY35]Script - scripts/start_server [2024-03-20 09:22:46.426] [d-XWH2NUY35][stderr]Redirecting to /bin/systemctl start httpd.service
問題なく動作していそうですね。
Auto ScalingしたEC2インスタンスに対してコンテンツ配布することを確認
せっかくなので、Auto ScalingしたEC2インスタンスに対してコンテンツ配布することを確認します。
Auto Scaling Group内のEC2インスタンスを停止させます。
すると、新しくEC2インスタンスが立ち上がってきました。
Auto Scalingのアクティビティにも記録されていました。
デプロイ履歴を確認すると、Auto Scaling Groupによって起動したEC2インスタンスに新たにデプロイが走っていそうです。
3分ほど待つとデプロイが完了しました。問題なく動作していますね。
CodeDeployを使いたいからという理由でRHEL 9の採用を諦めなくても良くなった
CodeDeploy Agent が Red Hat Enterprise Linux 9をサポートしたアップデートを紹介しました。
CodeDeployを使いたいからという理由でRHEL 9の採用を諦めなくても良くなりましたね。安心してRHEL 9を使えそうです。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!